|
Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript |
c++ - Really need help configuring config.h
Hi, I'm trying to compile gnu scientific library (gsl) v.1.7 with dcm++, and
after a lot of work I'm near the end of this task. This is a part of a project
that aim to compile with dmc++ the following libraries: atlas (cblas), clapack,
and gsl.
In fact, I think that dmc++ is well suited for numerical computating, but it
still misses the ports for this famous libraries.
I have spent a lot of hours on this project, and i will write a tutorial and
upload the relevant files when the project will be finished.
I still have some problem compiling gsl:
1) I need to configure by hand config.h. I examined the headers in dm\include,
and i ended up with this config.h file:
*******************************************
/* config.h Generated from configure.ac by autoheader.
02.03.06: Edited by hand for DMC/WinXP
*/
/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.
*/
#define HAVE_DECL_ACOSH 1
/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.
*/
#define HAVE_DECL_ASINH 1
/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.
*/
#define HAVE_DECL_ATANH 1
/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.
*/
#define HAVE_DECL_EXPM1 1
/* Define to 1 if you have the declaration of `feenableexcept', and to 0 if
you don't. */
#define HAVE_DECL_FEENABLEEXCEPT 0
/* Define to 1 if you have the declaration of `fesettrapenable', and to 0 if
you don't. */
#define HAVE_DECL_FESETTRAPENABLE 0
/* Define to 1 if you have the declaration of `finite', and to 0 if you don't.
*/
#define HAVE_DECL_FINITE 0
/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.
*/
#define HAVE_DECL_FREXP 1
/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.
*/
#define HAVE_DECL_HYPOT 1
/* Define to 1 if you have the declaration of `isfinite', and to 0 if you
don't. */
#define HAVE_DECL_ISFINITE 1
/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
*/
#define HAVE_DECL_ISINF 1
/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
*/
#define HAVE_DECL_ISNAN 1
/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.
*/
#define HAVE_DECL_LDEXP 1
/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.
*/
#define HAVE_DECL_LOG1P 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
#undef HAVE_DOPRNT
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `memcpy' function. */
#define HAVE_MEMCPY 1
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
/* Define to 1 if you have the `strtoul' function. */
#define HAVE_STRTOUL 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `vprintf' function. */
#define HAVE_VPRINTF 1
/* Name of package */
#define PACKAGE "Win-32 DMC++"
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 0 //§§§
/* Version number of package */
#define VERSION 1
/* Define as `__inline' if that's what the C compiler calls it, or to nothing
if it is not supported. */
//#undef inline
#define inline __inline
/* Define to `unsigned' if <sys/types.h> does not define. */
//#undef size_t
/* Define to empty if the keyword `volatile' does not work. Warning: valid
code using `volatile' can become incorrect without. Disable with care. */
//#undef volatile
/* Defined if this is an official release */
#undef RELEASED
/* Define if you have inline */
#define HAVE_INLINE 1
//#undef HAVE_INLINE
/* Define if you need to hide the static definitions of inline functions */
#undef HIDE_INLINE_STATIC
//#define HIDE_INLINE_STATIC
/* Defined if you have ansi EXIT_SUCCESS and EXIT_FAILURE in stdlib.h */
#define HAVE_EXIT_SUCCESS_AND_FAILURE 1
/* Use 0 and 1 for EXIT_SUCCESS and EXIT_FAILURE if we don't have them */
#if !HAVE_EXIT_SUCCESS_AND_FAILURE
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#endif
/* Define this if printf can handle %Lf for long double */
#define HAVE_PRINTF_LONGDOUBLE 1
/* Define one of these if you have a known IEEE arithmetic interface */
#undef HAVE_GNUSPARC_IEEE_INTERFACE
#undef HAVE_GNUM68K_IEEE_INTERFACE
#undef HAVE_GNUPPC_IEEE_INTERFACE
#undef HAVE_GNUX86_IEEE_INTERFACE
#undef HAVE_SUNOS4_IEEE_INTERFACE
#undef HAVE_SOLARIS_IEEE_INTERFACE
#undef HAVE_HPUX11_IEEE_INTERFACE
#undef HAVE_HPUX_IEEE_INTERFACE
#undef HAVE_TRU64_IEEE_INTERFACE
#undef HAVE_IRIX_IEEE_INTERFACE
#undef HAVE_AIX_IEEE_INTERFACE
#undef HAVE_FREEBSD_IEEE_INTERFACE
#undef HAVE_OS2EMX_IEEE_INTERFACE
#undef HAVE_NETBSD_IEEE_INTERFACE
#undef HAVE_OPENBSD_IEEE_INTERFACE
#undef HAVE_DARWIN_IEEE_INTERFACE
/* Define this is IEEE comparisons work correctly (e.g. NaN != NaN) */
#define HAVE_IEEE_COMPARISONS 1
/* Define this is IEEE denormalized numbers are available */
#undef HAVE_IEEE_DENORMALS
/* Define a rounding function which moves extended precision values
out of registers and rounds them to double-precision. This should
be used *sparingly*, in places where it is necessary to keep
double-precision rounding for critical expressions while running in
extended precision. For example, the following code should ensure
exact equality, even when extended precision registers are in use,
double q = GSL_COERCE_DBL(3.0/7.0) ;
if (q == GSL_COERCE_DBL(3.0/7.0)) { ... } ;
It carries a penalty even when the program is running in double
precision mode unless you compile a separate version of the
library with HAVE_EXTENDED_PRECISION_REGISTERS turned off. */
#undef HAVE_EXTENDED_PRECISION_REGISTERS
#if HAVE_EXTENDED_PRECISION_REGISTERS
#define GSL_COERCE_DBL(x) (gsl_coerce_double(x))
#else
#define GSL_COERCE_DBL(x) (x)
#endif
/* Substitute gsl functions for missing system functions */
#if !HAVE_DECL_HYPOT
#define hypot gsl_hypot
//#define hypot _hypot
#endif
#if !HAVE_DECL_LOG1P
#define log1p gsl_log1p
#endif
#if !HAVE_DECL_EXPM1
#define expm1 gsl_expm1
#endif
#if !HAVE_DECL_ACOSH
#define acosh gsl_acosh
#endif
#if !HAVE_DECL_ASINH
#define asinh gsl_asinh
#endif
#if !HAVE_DECL_ATANH
#define atanh gsl_atanh
#endif
#if !HAVE_DECL_LDEXP
#define ldexp gsl_ldexp
#endif
#if !HAVE_DECL_FREXP
#define frexp gsl_frexp
#endif
#if !HAVE_DECL_ISINF
#define isinf gsl_isinf
#endif
#if !HAVE_DECL_FINITE
#if HAVE_DECL_ISFINITE
#define finite isfinite
#else
//§ #define finite gsl_finite
#define finite _finite
#endif
#endif
#if !HAVE_DECL_ISNAN
//§ #define isnan gsl_isnan
#define isnan _isnan
#endif
#ifdef __GNUC__
#define DISCARD_POINTER(p) do { ; } while(p ? 0 : 0);
#else
#define DISCARD_POINTER(p) /* ignoring discarded pointer */
#endif
#if defined(GSL_RANGE_CHECK_OFF) || !defined(GSL_RANGE_CHECK)
#define GSL_RANGE_CHECK 0 /* turn off range checking by default */
#endif
#pragma warning( disable : 4244)
****************************
First of all, someone that is more expert than myself should check if eveything
is correct.
I have two problems:
First, if i set #define HAVE_DECL_ACOSH 1, #define HAVE_DECL_ASINH 1, #define
HAVE_DECL_ATANH 1 (as i should, i see this functions are definied in the headers
in dm\include) i get the following error:
out\libgsl.lib(math)
Error 42: Symbol undefined _atanh
I dont' understand why is it searching for _atnah and not atanh
Second, if i set the inlining as indicated (see the 3 inline macros, nothing
changes if i change HIDE_INLINE_STATIC value), i get the following error:
extern inline double gls_pow_2(const double x);
error: storage class is illgal in this contex
here is header file:
***************************
#ifndef __GSL_POW_INT_H__
#define __GSL_POW_INT_H__
#undef __BEGIN_DECLS
#undef __END_DECLS
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS /* empty */
# define __END_DECLS /* empty */
#endif
__BEGIN_DECLS
#ifdef HAVE_INLINE
extern inline double gsl_pow_2(const double x);
extern inline double gsl_pow_3(const double x);
extern inline double gsl_pow_4(const double x);
extern inline double gsl_pow_5(const double x);
extern inline double gsl_pow_6(const double x);
extern inline double gsl_pow_7(const double x);
extern inline double gsl_pow_8(const double x);
extern inline double gsl_pow_9(const double x);
extern inline double gsl_pow_2(const double x) { return x*x; }
extern inline double gsl_pow_3(const double x) { return x*x*x; }
extern inline double gsl_pow_4(const double x) { double x2 = x*x; return
x2*x2; }
extern inline double gsl_pow_5(const double x) { double x2 = x*x; return
x2*x2*x; }
extern inline double gsl_pow_6(const double x) { double x2 = x*x; return
x2*x2*x2; }
extern inline double gsl_pow_7(const double x) { double x3 = x*x*x; return
x3*x3*x; }
extern inline double gsl_pow_8(const double x) { double x2 = x*x; double x4 =
x2*x2; return x4*x4; }
extern inline double gsl_pow_9(const double x) { double x3 = x*x*x; return
x3*x3*x3; }
#else
double gsl_pow_2(const double x);
double gsl_pow_3(const double x);
double gsl_pow_4(const double x);
double gsl_pow_5(const double x);
double gsl_pow_6(const double x);
double gsl_pow_7(const double x);
double gsl_pow_8(const double x);
double gsl_pow_9(const double x);
#endif
double gsl_pow_int(double x, int n);
__END_DECLS
#endif /* __GSL_POW_INT_H__ */
*****************
The other problem is concerning the function randomize in test_heapsort.c:
Error: 'randomize' was previosuly declared as something else
It was declared as: void C func(void)
It is now declared as: void C func (double*,unsigned )
I think the problem is that this function is defined in the dm\include heareds.
Is there an easy way to solve this out? Maybe using undef in config.h?
I know that checking the config.h file is a long task, but if somone could help
me out with this, i will be very near to the end of this work.
Only 3 of all the tests of the gsl still fails: fft, rng, and sort.
Thank you in advance for any help!
Best Regards
Stefano
Mar 04 2006
|