Mail Archives: djgpp-workers/1998/09/04/11:07:09
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 <pavenis AT lanet DOT lv>
----------------------------------------------------------------------
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 <libm/math.h>
#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
- Raw text -