/* factoryconf.h automatically generated by makeheader from factoryconf.template */
/* emacs edit mode for this file is -*- C -*- */

#ifndef INCL_FACTORYCONF_H
#define INCL_FACTORYCONF_H

/* {{{ docu
*
* factoryconf.template - template to generate `factoryconf.h'.
*
* `factoryconf.h' serves as a configuration file for the
* installed source files (templates and `factory.h') the same
* way as `config.h' serves as a configuration file for the
* source files from which the library is build.  Additionally,
* we paste a copy of our `assert.h' into this file which is
* necessary for the templates to translate.
*
*/
/* }}} */

/* stuff included from ./config.h */

/* config.h.  Generated from config.h.in by configure.  */
/* emacs edit mode for this file is -*- C -*- */

#ifndef INCL_CONFIG_H
#define INCL_CONFIG_H

/* {{{ docu
 *
 * config.h.in - used by `configure' to create `config.h'.
 *
 * This file is included at building time from almost all source
 * files belonging to Factory.  Furthermore, it is (textually)
 * included into `factoryconf.h' by `makeheader' so we have an
 * installed version of this file, too.  This way, the installed
 * source files will be compiled with the same settings as the
 * library itself.
 *
 * In general, you should let `configure' guess the correct
 * values for the `#define's below.  But if something seriously
 * goes wrong in configuring, please inform the authors and feel
 * free to edit the marked section.
 *
 */
/* }}} */

/************** START OF CONFIGURABLE SECTION **************/

/* Define to empty if the keyword does not work.  */
/* #undef const */

/* Define as __inline if that's what the C compiler calls it.  */
/* #undef inline */

/* factory version */
#define FACTORYVERSION "3.1.7"

/* factory configuration */
#define FACTORYCONFIGURATION "' '--prefix=/build/singular/src/Singular-3-1-7/build/usr/lib/Singular' '--bindir=/build/singular/src/Singular-3-1-7/build/usr/lib/Singular' '--libdir=/build/singular/src/Singular-3-1-7/build/usr/lib/Singular' '--includedir=/build/singular/src/Singular-3-1-7/build/usr/include' '--with-apint=gmp' '--with-gmp=/usr' '--with-malloc=system' '--with-ntl=/usr' '--with-flint=/usr' '--disable-doc' '--with-NTL' '--without-MP' '--enable-Singular' '--enable-factory' '--enable-libfac' '--enable-IntegerProgramming' '--exec_prefix=/build/singular/src/Singular-3-1-7/build/usr/lib/Singular/unknown' '--enable-omalloc' '--with-external-config_h=/build/singular/src/Singular-3-1-7/Singular/omSingularConfig.h' '--with-track-custom' '--enable-Plural' '--with-factory' '--with-libfac' '--with-Singular=yes' '--cache-file=.././config.cache' '--srcdir=.' 'CFLAGS=-fPIC -DPIC -DLIBSINGULAR' 'LDFLAGS=-L/build/singular/src/Singular-3-1-7/build/usr/lib/Singular -Wl,-O1,--sort-common,--as-needed,-z,relro' 'CPPFLAGS=-I/build/singular/src/Singular-3-1-7/build/usr/include -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-fPIC -DPIC -DLIBSINGULAR' 'CPP=/usr/bin/cpp' 'CXXCPP=/usr/bin/cpp'' in /build/singular/src/Singular-3-1-7/factory"

/* where the gftables live */
#define GFTABLEDIR "/build/singular/src/Singular-3-1-7/factory//factory/gftables"

/* define if your compiler does arithmetic shift */
/* #undef HAS_ARITHMETIC_SHIFT */

/* define to use "configurable inline methods" (see `cf_inline.cc') */
/* #undef CF_USE_INLINE */

/* define to build factory without stream IO */
#define NOSTREAMIO 1

/* which C++ header variants to use */
/* #undef HAVE_IOSTREAM_H */
/* #undef HAVE_FSTREAM_H */
/* #undef HAVE_STRSTREAM_H */

/* #undef HAVE_IOSTREAM */
/* #undef HAVE_FSTREAM */
/* #undef HAVE_STRING */

#define HAVE_CSTDIO 1

/* define if linked to Singular */
#define SINGULAR 1

/* define if build with OMALLOC */
#define HAVE_OMALLOC 1

/* define if linked with factory memory manager */
/* #undef USE_MEMUTIL */

/* define if linked with old factory memory manager */
/* #undef USE_OLD_MEMMAN */

/* define if linked with new factory manager, debugging version */
/* #undef MDEBUG */

/* define if you do not want to activate assertions */
#define NOASSERT 1

/* define if you want to activate the timing stuff */
/* #undef TIMING */

/* define if you want to have debugging output */
/* #undef DEBUGOUTPUT */

/* define type of your compilers 64 bit integer type */
#define INT64 long long int

/* define size of long */
#define SIZEOF_LONG 4

#define HAVE_NTL 1

#define HAVE_FLINT 1

/************** END OF CONFIGURABLE SECTION **************/

#endif /* ! INCL_CONFIG_H */

/* stuff included from ./assert.h */

/* emacs edit mode for this file is -*- C -*- */

/* This is for compatibility with standard assert.h */
#if defined (NDEBUG) && ! defined (NOASSERT)
#define NOASSERT
#endif

/* It should be possible to include this file multiple times for different */
/* settings of NOASSERT */

/* {{{ undefines */
#undef __ASSERT
#undef __ASSERT1
#undef STICKYASSERT
#undef STICKYASSERT1
#undef ASSERT
#undef ASSERT1

#undef __WARN
#undef STICKYWARN
#undef WARN

#undef PVIRT_VOID
#undef PVIRT_INTCF
#undef PVIRT_BOOL
#undef PVIRT_INT
#undef PVIRT_CHARCC
/* }}} */

#ifdef __cplusplus
extern "C" {
#include <stdlib.h>
}
#ifdef HAVE_CSTDIO
#include <cstdio>
#else
extern "C" {
#include <stdio.h>
}
#endif
#else
#include <stdio.h>
#include <stdlib.h>
#endif

/* {{{ permanent macro definitions */
#ifndef __GNUC__
#define __ASSERT(expression, message, file, line) \
(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
 file, line, expression ), abort(), 0 )
#define __ASSERT1(expression, message, parameter1, file, line)  \
(fprintf( stderr, "error: " message "\n%s:%u: failed assertion `%s'\n", \
 parameter1, file, line, expression ), abort(), 0 )

#define STICKYASSERT(expression, message) \
((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
#define STICKYASSERT1(expression, message, parameter1) \
((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))

#define __WARN(expression, message, file, line)  \
(fprintf( stderr, "warning: " message "\n%s:%u: failed assertion `%s'\n", \
 file, line, expression ), 0 )
#define STICKYWARN(expression, message) \
((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
#else /* __GNUCC__ */
/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
#define __ASSERT(expression, message, file, line, function) \
(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
 file, line, function, expression ), abort(), 0 )
#define __ASSERT1(expression, message, parameter1, file, line, function)  \
(fprintf( stderr, "error: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
 parameter1, file, line, function, expression ), abort(), 0 )

#define STICKYASSERT(expression, message) \
((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
#define STICKYASSERT1(expression, message, parameter1) \
((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))

#define __WARN(expression, message, file, line, function)  \
(fprintf( stderr, "warning: " message "\n%s:%u: In function `%s':\nfailed assertion `%s'\n", \
 file, line, function, expression ), 0 )
#define STICKYWARN(expression, message) \
((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
#endif /* __GNUCC__ */
/* }}} */

/* {{{ macro definitions dependent on NOASSERT */
#ifndef NOASSERT
#ifndef __GNUC__
#define ASSERT(expression, message) \
((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__)))
#define ASSERT1(expression, message, parameter1) \
((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__)))

#define WARN(expression, message) \
((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__)))
#else /* __GNUCC__ */
/* use preprocessor macro __PRETTY_FUNCTION__ for more informative output */
#define ASSERT(expression, message) \
((void)((expression) ? 0 : __ASSERT(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
#define ASSERT1(expression, message, parameter1) \
((void)((expression) ? 0 : __ASSERT1(#expression, message, parameter1, __FILE__, __LINE__, __PRETTY_FUNCTION__)))

#define WARN(expression, message) \
((void)((expression) ? 0 : __WARN(#expression, message, __FILE__, __LINE__, __PRETTY_FUNCTION__)))
#endif /* __GNUCC__ */

#define PVIRT_VOID(msg) \
{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); }
#define PVIRT_INTCF(msg) \
{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
#define PVIRT_BOOL(msg) \
{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return false; }
#define PVIRT_INT(msg) \
{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
#define PVIRT_CHARCC(msg) \
{ fprintf( stderr, "pure method( " msg " ) called\n" ); abort(); return 0; }
#else /* NOASSERT */
#define ASSERT(expression, message)
#define ASSERT1(expression, message, parameter1)

#define WARN(expression, message)

#define PVIRT_VOID(msg) = 0
#define PVIRT_INTCF(msg) = 0
#define PVIRT_BOOL(msg) = 0
#define PVIRT_INT(msg) = 0
#define PVIRT_CHARCC(msg) = 0
#endif /* NOASSERT */
/* }}} */

#endif /* ! INCL_FACTORYCONF_H */
