Date: Fri, 4 Sep 1998 17:18:41 +0200 (WET) From: Andris Pavenis To: djgpp-workers AT delorie DOT com Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-Transfer-Encoding: 8bit Precedence: bulk This is announcment of test release of DJGPP port of egcs-1.1a [ egcs-2.91.57 19980901 (egcs-1.1 release) ]. It is available on DJGPP distribution in directory v2gnu/alphas/egcs-1.1a ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/v2gnu/alphas/egcs-1.1a/ My experience (not only with release but also with previous development snapshots for about a month) shows that binaries are stable enough and I haven't met any serious problems yet. I build egcs-1.1a using slightly patched djdev202-980726. Only problem when using binaries with djdev201 I know is that exceptions will not work however the way used in port of gcc-2.8.1 is still usable. I'm including bash script that performs needed changes at end of this message (You must have gcc-e11b.zip installed before running this script) I'm asking to test it especially with djdev201 as I did only some such tests. Please inform about problems if You found any (excluding need for LFN while building egcs) Also one other question: is it reasonable to release it for all users with changes needed to get it fully working with current stable version (djdev201)? Of course answer will require testing Andris PS. Sorry for huge message but think it is better to include full readme and also changes needed to use binaries with djdev201 here -------------- Contents of readme.djgpp ----------------------- This is the port of egcs-1.1a for DJGPP. It comes as usual in different zip-archives for the sources and the binaries. ############################################################################## Please read this file up to end (maybe skipping sections You don't need, for example You don't need to read how to build egcs-1.1a from sources if You only intend to use binary archives). Also consult DJGPP documentation and FAQ where needed. ############################################################################## Requirements to use this binary release: djdev202-980726 or above (Some hacking needed to use with djdev201) binutils-2.8.1 or above (I haven't tests earlier versions) ############################################################################## Requirements to build egcs-1.1a from sources: Long filename support (will NOT work when not available) djdev202-980726 or above (for that version it's necessary to patch some modules (see below) other GNU utilities (see below) ############################################################################## See also http://egcs.cygnus.com/egcs-1.1/egcs-1.1.html for additional information about egcs-1.1 The source archive egcs11s.zip contains all the sources to build all compilers (C, C++, Objective C, GNU Fortran) and also C++ and Fortran libraries (libstdcxx.a, libgpp.a and libf2c.a). I included in source archive libg++-2.8.1.1a which originally were not a part of egcs-1.1a distribution. Look below for more detailed information about source archive. NOTE: LFN support is required to build egcs-1.1a from sources. But the binary archives are split into 5 parts: gcc-e11b.zip : The gcc.exe driver program and the C compiler. It also contains the documentation. gpp-e11b.zip : The C++ compiler and libstdcxx.a together with needed header files objce11b.zip : The OBJC compiler and libobjc.a and the needed header files. g77-e11b.zip : GNU Fortran compiler (version 0.5.24) and libg2c.a and g2f.h. lgp-e11b.zip : libg++ binary archive (needed if You want to use it). Using libg++ for new programs is not recommended as this library is no more maintained. The archive gcc-e11b.zip is also required by gpp281b.zip, objc281b.zip and g770523b.zip Before you install egcs-1.1a ============================ The DJGPP distribution of egcs-1.1a is now different from the one used by gcc 2.7.x. Now the directory structure is more similar to that of unix systems and also all the DJGPP standard directories are hardcoded already. Similar directory structure were already used for gcc-2.8.X To get no trouble, you should remove at least your old gcc installation completely, especially the compilers (cc1.exe, cc1plus.exe ...) and libgcc.a from directory $DJDIR/lib, because they will not overwritten by the new distribution. You will have such files if previous gcc version were 2.7.2. You should avoid having following files in $DJDIR/lib: specs, djgpp.djl, libgcc.a, libobjc.a and following files in $DJDIR/bin cc1.exe, cc1plus.exe, cc1obj.exe, f771.exe If you don't remove them, and you don't modify your djgpp.env file, new version of gcc can still use these old binaries or the libgcc.a because they are in directories which are searched before the hardcoded ones. I also recommend removing the files 'specs' and 'djgpp.djl' from %DJDIR/lib. Archive gcc281b.zip contains replacement for these files which will go to a different directory %DJDIR/lib/gcc-lib/djgpp/egcs-291.57. If you have changed either of these 2 files you might consider transferring these changes to the new files. It is possible to avoid removing these files but don't do this unless you know what you are doing. Additionally you can safely remove the [gcc] and [cpp] section from your djgpp.env file, since the path-settings there are not longer needed, because gcc (and cpp) is configured already in a way to search these directories by default. If you have modified already these sections for instance to have some of your own directories searched by default, you should leave only those directories there and remove the standard DJGPP directories. Modifying the djgpp.env is not really necessary, but I recommend it. NOTE for users of RHIDE-1.4 ============================ The name of C++ library is now libstdcxx.a instead of libstdcx.a as it was for port of gcc-2.7.2.1. RHIDE-1.4 uses latest name by default. I included fix (section [rhide]) in example of DJGPP.ENV file mentioned above. An alternate way is to add line (create new file if needed). There is no such problem with RHIDE-1.4.5. RHIDE_TYPED_LIBS_DJGPP.cc=stdcxx to file %DJDIR/share/rhide/rhide.env Similary to use GNU Fortran from RHIDE, You should add line RHIDE_TYPED_LIBS.f=g2c m to the same file (this change is needed also for RHIDE-1.4.5) How to install the binary archives? =================================== Install them like any other DJGPP binary archive: - change to your DJGPP base directory (often c:/djgpp) and unzip there the archive unzip gcc-e11b.zip (if you are using PKUNZIP, remember to use the -d switch!!) and that's all. Installing under Windows 95 =========================== If you want to install and use gcc under Windows 95, you should remember that this OS can handle long and case sensitive filenames. Here are three cases: 1. Only long filenames ---------------------- Unzip the binaries with an unzip program, which can restore the long filenames stored in the zip archive. 2. Only short filenames ----------------------- Unzip the binaries with an unzip program which doesn't know about long filenames, or if your unzipper knows about them, please follow first the steps described in the DJGPP FAQ 2.01 in the section about setting the NameNumericTail to 0 __BEFORE__!!! unzipping the archives. 3. Long and short filenames at the same time -------------------------------------------- Use an unzip program which can restore the long filenames and follow the instructions under 2. when the unzipper knows about long filenames. DJGPP specific hints for C++ ============================ Since there are still some long filename problems which could not be solved in an easy way, there are some tricks to get all the functionality in C++. Especially, some headers are renamed to avoid conflicts with either each other or with existing header files from libc. I list here all the relevant header files and how they are named for DJGPP Complex.h -> _Complex.h String.h -> _String.h Regex.h -> _Regex.h iostreamP.h -> _iostreamP.h stl_algobase.h -> stlalgobase.h stl_hash_map.h -> stlhashmap.h stl_hash_set.h -> stlhashset.h stl_hashtable.h -> stlhashtable.h stl_multiset.h -> stlmultiset.h So there are now two ways to include these headers. Either use the DJGPP specific name or use a new feature of the preprocessor cpp. It accepts now a new commandline switch "-remap" which tells cpp to look in a directory for a file named "header.gcc". It takes that file as a translation table if a requested file was not found in the directory. The DJGPP distribution of g++ and libg++ already come with these translation files, but they are currently not used. To use them, you have to modify your specs file to add the "-remap" switch to the call for cpp, since this switch cannot passed to cpp from the gcc comanndline. Here is a possible line from the spec file in your lib/ directory: *cpp: -remap %{posix:-D_POSIX_SOURCE} Exception support under DJGPP ============================= With djdev202.zip (currently still alpha version) there is no need to do anything to get exceptions working. If djdev201.zip is being used situation is more complicated. I didn't provide files that were included in DJGPP port of gcc-2.8.1 for that purpose. Following steps are necessary: - take crtf.o from gcc-2.8.1 binary distribution (gcc281b). gcc281b contains also source (crtf.c) so You can recompile it however I think it is not needed. crtf.o should be copied to directory - specs file should be modified to provide linking crtf.o Rebuilding gcc from the sources =============================== Requirememts ------------ To build gcc you need many GNU utilities installed. This includes at the very least bash and a symlink sh to it. ******** To get it, change to the DJGPP bin directory and type there ln -s bash.exe sh.exe ******** You need LFN support to build egcs-1.1a from current sources (don't even try to do this when LFN support is not available, this will not work). I built egcs using djdev202-980726 (alpha version) after applying 2 patches to it: 1) applied Robert's Hoehne fix to realloc() [file src/libc/ansi/stdlib/malloc.h] ---------------------------------------------------------------------- --- malloc.c~ Sun Jun 28 22:14:04 1998 +++ malloc.c Thu Aug 6 21:56:04 1998 @@ -333,12 +333,12 @@ if (ptr == 0) return malloc(size); - copysize = b->size; - if (size <= b->size) + copysize = b->size & ~1; + if (size <= copysize) { #if 0 if (b->size < 2*MIN_SAVE_EXTRA - || (size >= b->size-512 && size >= b->size/2)) + || (size >= b->size-512 && size >= copysize/2)) #endif return ptr; copysize = size; @@ -347,7 +347,7 @@ newptr = (char *)malloc(size); #if DEBUG printf("realloc %d %d/%08x %08x->%08, %d\n", - size, b->size, b, ptr, newptr, copysize); + size, b->size & ~1, b, ptr, newptr, copysize); #endif memcpy(newptr, ptr, copysize); free(ptr); ---------------------------------------------------------------------- 2) fixed bug in src/libc/dos/errno/doserr2e.c (thanks Eli for hint) ---------------------------------------------------------------------- --- doserr2e.c~ Sun Jun 28 23:33:56 1998 +++ doserr2e.c Mon Aug 24 10:57:14 1998 @@ -6,7 +6,7 @@ static unsigned char map[] = { /* 00-07 */ 0, EINVAL, ENOENT, ENOENT, EMFILE, EACCES, EBADF, EFAULT, /* 08-0f */ ENOMEM, EFAULT, EFAULT, EINVAL, EINVAL, EINVAL, EINVAL, ENODEV, - /* 10-17 */ EBUSY, EXDEV, ENFILE, EROFS, ENXIO, ENXIO, EINVAL, EIO, + /* 10-17 */ EBUSY, EXDEV, ENMFILE, EROFS, ENXIO, ENXIO, EINVAL, EIO, /* 18-1f */ EINVAL, EIO, EIO, EIO, EIO, EIO, EIO, EIO, /* 20-27 */ EPERM, EPERM, ENXIO, EBADF, ENOLCK, EINVAL, EIO, ENOSPC, /* 28-2f */ EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, ---------------------------------------------------------------------- Because it is really not possible for me to check for any needed program I include here only a list of packages which you will need at least: - fil316b.zip - find41b.zip - grep20b.zip - mak377b.zip - sed302b.zip - shl112b.zip - txt122b.zip - txi312b.zip I configured gcc and libraries with autoconf-1.12 and automake-1.3 installed. However they should not be needed if sources are not modified. And you need about much free disk space, when you build without debugging information. I think 120 Mb free space before unpacking source archive could be good approximation. Extracting the sources ---------------------- At first you should unzip the archive egcs11s.zip. The sources are _NOT_ the complete sources like the original egcs-1.1a distribution. I have removed many files to save disk space which are not needed for the DJGPP port. I changed also directory structure of source archive as building gcc simultanously with libraries did not work under DJGPP. Therefore sources are split into 2 directories: gcc and libs - directory gcc contains sources of gcc - directory libs contains sources of C++ and Fortran libraries. There are 2 steps necessary to compile egcs for DJGPP - compile and install gcc - compile libraries with newly compiled gcc and install them Compiling gcc ------------- Directory gnu/egcs-1.1a/gcc contains sources of gcc and should be built before libraries. gcc sources are already configured, but if you want to reconfigure them, please use _ONLY_ the script file 'djconfig.sh' instead of running the configure script, since it does some tricks before running configure. (Read the comments inside this file!!). This file is in directory gnu/egcs-1.1a/gcc/build.djg. To run it you must have bash installed and a symlink sh.exe to bash.exe. I configured compiler sources to be compiled in directory gcc/build.djg. Then to run the djconfig.sh script type there sh djconfig.sh [any-additional-paramter] Another script 'djmake.sh' must be used used instead of simply make. As above: Please use _ONLY_ this script instead of running a simple make (unless of course you know what you're doing). Now you run make by typing sh djmake.sh [any-additional-paramter] as replacement for make [any-additional-parameter] Installing newly compiled gcc ----------------------------- You can install newly compiled gcc by typing ./djmake.sh install prefix=directory_where_to_install I recommend to install into temporary directory instead of directly into DJGPP directory as some manual changes will be needed after this. It is necessary to specify prefix as ./djconfig.sh uses some tricks to get $DJDIR hardcoded into binaries. That will prevent normal work of ./djmake.sh install when prefix is not specified. Compiling in another directory ------------------------------- I configured gcc to be compiled in directory build.djg. To change this directory you should move its contents to the desired location and modify both scripts (djconfig.sh and djmake.sh) to set the exact path to sources. After that, you can use these scripts as described above. Building C++ and Fortran libraries ================================== Please install newly compiled gcc before trying to build libraries. Directory gnu/egcs-1.1a/libs contains sources of C++ and Fortran libraries and should be built using previously compiled version of gcc. Sources are already configured, but if you want to reconfigure them, please use _ONLY_ the script file 'djconfig.sh' instead of running the configure script, since it does some tricks before running configure. (Read the comments inside this file!!). This file is in directory gnu/egcs-1.1a/libs/build.djg. To run it you must have bash installed and a symlink sh.exe to bash.exe. I configured libraries to be compiled in directory libs/build.djg. Then to run the djconfig.sh script type there sh djconfig.sh [any-additional-paramter] Another script 'djmake.sh' must be used used instead of simply make. As above: Please use _ONLY_ this script instead of running a simple make (unless of course you know what you're doing). Now you run make by typing sh djmake.sh [any-additional-paramter] as replacement for make [any-additional-parameter] Things to do ============ - Make compiling egcs to work without LFN support. It is significant not break things similary as it was done with port of gcc-2.8.1. Perhaps I'll not do this. Unfortunatelly I don't think all will work without LFN support, but at least compiling should work. Patching original egcs sources to be used with DJGPP ==================================================== - This is newest and perhaps less tested part of source archive. I included shell script that creates sources usable with DJGPP in directory gnu/egcs-1.1a/contrib. To get sources for DJGPP following steps should be done: 1) unpack original sources of egcs 2) unpack original sources of libg++ (move them to get subdirectories libg++ and librx under main egcs directory). I used libg++-2.8.1.1a but also development versions of libg++-2.8.2 should work (I had problems with ./djmake.sh install later when I tried them) 3) change to main egcs directory and run patching script ../contrib/egcs-patch.sh There will be error messages from autoconf in librx (I ignored them) 4) in directory gcc/build.djg: - run './djconfig.sh' (You need autoconf for this) - run './djmake.sh cstamp-h.in' (You need patched auptoheader, see below) - run './djconfig.sh once more' 5) in directory libs/build.djg: - run './djconfig.sh' - run './djmake.sh configure-target-libiberty \ configure-target-libio configure-target-libstdc++ \ configure-target-libg++ configure-target-libf2c' - run './djmake.sh clean' if You intend o make distribution archive (otherwise You can skip this) - after that You can make source archive for DJGPP (some cleanup of directory texinfo can be done before). This steps to build source distribution of egcs for DJGPP should (as I expect) work also for PGCC and next minor releases of egcs (maybe with some minimal modifications of patching script). However I haven't tested this all with PGCC. I used earlier versions of patching script to build earlier development snapshots of egcs-1.1 (and also prerelease) Installing newly compiled libraries ------------------------------------ You can install newly compiled libraries by typing ./djmake.sh install prefix=directory_where_to_install I recommend to install into temporary directory instead of directly into DJGPP directory as some manual changes will be needed after this. Reporting bugs ============== If you found a bug in egcs, please report it to the egcs bug adresses and _NOT_ (or at least not only) in the DJGPP news group. But if you think you found a bug in the DJGPP related things, then please report it in comp.os.msdos.djgpp (the news group) or mail it to djgpp AT delorie DOT com, which is the gateway to the news group. Some possible situations: - gcc says 'Internal compiler error' more likely it is error of gcc. It would be nice to test on some other system (e.g. Linux) and submit report to egcs bug address - gcc crashes or freezes. Please email me directly only in rare cases, if you think it is only of interest to me, since I see the reports in comp.os.msdos.djgpp also. Have fun with egcs, Andris Pavenis ---------------------------------------------------------------------- patch to autoheader. Nedeed ONLY if you need to run autoheader under Windows 95. Normally NOT NEEDED to build gcc unless you modify Configure.in ----------------- patch to autoheader ------------------------ *** autoheader~ Wed May 14 17:33:34 1997 --- autoheader Tue Mar 24 15:03:18 1998 *************** *** 261,266 **** --- 261,267 ---- fi if test $# -eq 0; then + exec > con if test $status -eq 0; then if test -f ${config_h_in} && cmp -s $tmpout ${config_h_in}; then rm -f $tmpout # File didn't change, so don't update its mod time. ---------------------------------------------------------------- Script for patching EGCS-1.1 binary distribution for use with djdev201 ------------------------------------------------------------------------ #! /bin/sh ############################################################################## # If You don't understand what this file means and how to run it # then it is not for You. # This file must be considered obsolete when DJDEV202 will be released #----------------------------------------------------------------------------- # This is script that slightly modifies installed egcs-1.1a to have # proper exceptions handling in C++ when DJDEV201.ZIP is being used. # It is not needed when DJDEV202.ZIP is installed. This script is intended # to be used with binaries of egcs-1.1a release ONLY. ############################################################################## gv=`gcc -v 2>&1 | sed 1q` if [ "x$gv" = "xUsing builtin specs." ]; then echo "Instalation problem: quitting..." exit fi # if echo $gv | grep -q egcs-291.57; then specs_name=`gcc -print-file-name=specs` version_dir=`echo $specs_name | sed -e 's,57[/]specs,57,g'` patch -N $specs_name << 'EOF' --- specs.orig Thu Sep 3 11:03:46 1998 +++ specs Fri Sep 4 10:19:54 1998 @@ -26,7 +26,7 @@ -lgcc *startfile: -%{pg:gcrt0.o%s}%{!pg:crt0.o%s} +crtf.o%s %{pg:gcrt0.o%s}%{!pg:crt0.o%s} *switches_need_spaces: EOF echo "Writting file $version_dir/crtf.c" cat >$version_dir/crtf.c << 'EOF' /* crtf.c is copyright by Robert H”hne 1998. You can use it freely and also modify it if you want but in that case please include a note that you have modified it before you distribute modified versions of it. You are not allowed to distribute this file in compiled form only. You have to include ever the source for the file so the user can see, what the startup file really does. Use that file at your own risk. */ /* This file is used as additional startup file when linking programs for DJGPP. This is needed if you want to have full exception support. It needs some assistance by the linker script and assumes that in the linker script the symbol ___EH_FRAME_BEGIN__ is defined and that this symbol is defined as the first symbol in the .eh_frame section (shortened to the .eh_fram section). To explain it, here a snipped from a linker script, how it could be written: .data ALIGN(0x200) : { djgpp_first_ctor = . ; LONG(_init_frame) ; *(.ctor) djgpp_last_ctor = . ; djgpp_first_dtor = . ; *(.dtor) djgpp_last_dtor = . ; *(.data) *(.gcc_exc) ___EH_FRAME_BEGIN__ = . ; *(.eh_fram) ___EH_FRAME_END__ = . ; LONG(0) edata = . ; _edata = .; . = ALIGN(0x200); } As the next it assumes, that this file is placed as the first (or the second after crt0.o) object file in each executable via the specs file so it can be sure, that the function with the constructor attribute is called first before any other constructors. As an example, here a sample entry, how the specs file could be written: *startfile: %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crtf.o crt0.o%s}} */ extern void __EH_FRAME_BEGIN__(); /* This function is provided with the libgcc.a library which simply registers the start of the exception tables by remembering the address passed with the first argument and initializing a struct passed with the second argument. */ extern void __register_frame_info (void *, void *); static void __attribute__((constructor)) frame_dummy () { /* normally this should be a struct object { void *pc_begin; void *pc_end; void *fde_begin; void **fde_array; size_t count; struct object *next; }; but a placeholder of the same size does it also */ /* W A R N I N G : If the size of this struct changes in future versions of gcc, remember this here !!! The struct is declared in the file frame.h from the gcc sources */ static int object[6]; __register_frame_info (__EH_FRAME_BEGIN__, &object); } EOF echo "Compiling file $version_dir/crtf.c" gcc -v -c -O2 $version_dir/crtf.c -o $version_dir/crtf.o ####################################################################### echo "Writting file $version_dir/include/math.h" cat >$version_dir/include/math.h << 'EOF' /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #ifndef __dj_include_math_h_ #define __dj_include_math_h_ #ifdef _USE_LIBM_MATH_H #include #else #ifdef __cplusplus extern "C" { #endif #ifndef __dj_ENFORCE_ANSI_FREESTANDING extern double __dj_huge_val; #define HUGE_VAL __dj_huge_val double acos(double _x); double asin(double _x); double atan(double _x); double atan2(double _y, double _x); double ceil(double _x); double cos(double _x); double cosh(double _x); double exp(double _x); double fabs(double _x); double floor(double _x); double fmod(double _x, double _y); double frexp(double _x, int *_pexp); double ldexp(double _x, int _exp); double log(double _y); double log10(double _x); double modf(double _x, double *_pint); double pow(double _x, double _y); double sin(double _x); double sinh(double _x); double sqrt(double _x); double tan(double _x); double tanh(double _x); #ifndef __STRICT_ANSI__ #ifndef _POSIX_SOURCE #define M_E 2.7182818284590452354 #define M_LOG2E 1.4426950408889634074 #define M_LOG10E 0.43429448190325182765 #define M_LN2 0.69314718055994530942 #define M_LN10 2.30258509299404568402 #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.78539816339744830962 #define M_1_PI 0.31830988618379067154 #define M_2_PI 0.63661977236758134308 #define M_2_SQRTPI 1.12837916709551257390 #define M_SQRT2 1.41421356237309504880 #define M_SQRT1_2 0.70710678118654752440 #define PI M_PI #define PI2 M_PI_2 double log2(double _x); long double modfl(long double _x, long double *_pint); double pow10(double _x); double pow2(double _x); /* These are in libm.a (Cygnus). You must link -lm to get these */ /* See libm/math.h for comments */ #ifndef __cplusplus struct exception { int type; char *name; double arg1; double arg2; double retval; }; #endif extern double erf(double); extern double erfc(double); extern double gamma(double); extern double hypot(double, double); extern int isinf(double); extern int isnan(double); extern int finite(double); extern double j0(double); extern double j1(double); extern double jn(int, double); extern double lgamma(double); extern double y0(double); extern double y1(double); extern double yn(int, double); extern double acosh(double); extern double asinh(double); extern double atanh(double); extern double cbrt(double); extern double logb(double); extern double nextafter(double, double); extern double remainder(double, double); extern double scalb(double, double); #ifndef __cplusplus extern int matherr(struct exception *); #endif extern double significand(double); extern double copysign(double, double); extern int ilogb(double); extern double rint(double); extern double scalbn(double, int); extern double drem(double, double); extern double expm1(double); extern double log1p(double); #ifdef _REENTRANT extern double gamma_r(double, int *); extern double lgamma_r(double, int *); #endif /* _REENTRANT */ extern float acosf(float); extern float asinf(float); extern float atanf(float); extern float atan2f(float, float); extern float cosf(float); extern float sinf(float); extern float tanf(float); extern float coshf(float); extern float sinhf(float); extern float tanhf(float); extern float expf(float); extern float frexpf(float, int *); extern float ldexpf(float, int); extern float logf(float); extern float log10f(float); extern float modff(float, float *); extern float powf(float, float); extern float sqrtf(float); extern float ceilf(float); extern float fabsf(float); extern float floorf(float); extern float fmodf(float, float); extern float erff(float); extern float erfcf(float); extern float gammaf(float); extern float hypotf(float, float); extern int isinff(float); extern int isnanf(float); extern int finitef(float); extern float j0f(float); extern float j1f(float); extern float jnf(int, float); extern float lgammaf(float); extern float y0f(float); extern float y1f(float); extern float ynf(int, float); extern float acoshf(float); extern float asinhf(float); extern float atanhf(float); extern float cbrtf(float); extern float logbf(float); extern float nextafterf(float, float); extern float remainderf(float, float); extern float scalbf(float, float); extern float significandf(float); extern float copysignf(float, float); extern int ilogbf(float); extern float rintf(float); extern float scalbnf(float, int); extern float dremf(float, float); extern float expm1f(float); extern float log1pf(float); #ifdef _REENTRANT extern float gammaf_r(float, int *); extern float lgammaf_r(float, int *); #endif /* _REENTRANT */ #endif /* !_POSIX_SOURCE */ #endif /* !__STRICT_ANSI__ */ #endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ #ifndef __dj_ENFORCE_FUNCTION_CALLS #endif /* !__dj_ENFORCE_FUNCTION_CALLS */ #ifdef __cplusplus } #endif #endif /* _USE_LIBM_MATH_H */ #endif /* !__dj_include_math_h_ */ EOF ############################################################################## else echo "Incorrect gcc version: egcs-2.91.57 19980901 (egcs-1.1 release) required" fi