gcc/gcc/config.in
Jakub Jelinek 24a4dd31f8 configure.in (HAVE_LD_PIE): Check for ld -pie.
* configure.in (HAVE_LD_PIE): Check for ld -pie.
	* config.in: Rebuilt.
	* configure: Rebuilt.
	* toplev.c (flag_pie, flag_shlib): New variables.
	(f_options): Add -fpie and -fPIE.
	(parse_options_and_default_flags): Set flag_pic if -fpie/-fPIE.
	Set flag_shlib if flag_pic and not -fpie/-fPIE.
	* flags.h (flag_pic, flag_shlib): Add.
	* varasm.c (default_binds_local_p): Use flag_shlib instead of
	flag_pic.
	* gcc.c (LINK_PIE_SPEC): Define.
	(LINK_COMMAND_SPEC): Use LINK_PIE_SPEC.
	(option_map): Add --pie -> -pie mapping.
	* config/sol2.h (ASM_SPEC): Handle -fpie the same way as -fpic
	and -fPIE the same way as -fPIC.
	* config/openbsd.h (ASM_SPEC): Likewise.
	* config/frv/frv.h (ASM_SPEC): Likewise.
	* config/arm/linux-gas.h (SUBTARGET_CPP_SPEC): Likewise.
	* config/arm/semi.h (ASM_SPEC): Likewise.
	* config/arm/netbsd-elf.h (SUBTARGET_EXTRA_ASM_SPEC): Likewise.
	* config/freebsd-spec.h (FBSD_CPP_SPEC): Likewise.
	* config/i386/beos-elf.h (CC1_SPEC): Likewise.
	* config/i386/freebsd-aout.h (ASM_SPEC): Likewise.
	* config/m68k/linux.h (CPP_SPEC): Likewise.
	* config/m68k/netbsd.h (ASM_SPEC): Likewise.
	* config/m68k/openbsd.h (ASM_SPEC): Likewise.
	* config/m68k/netbsd-elf.h (ASM_SPEC): Likewise.
	* config/mips/linux.h (SUBTARGET_CPP_SPEC): Likewise.
	* config/mips/openbsd.h (SUBTARGET_ASM_SPEC): Likewise.
	* config/pa/pa-linux.h (CPP_SPEC): Likewise.
	* config/netbsd-aout.h (ASM_SPEC): Likewise.
	* config/rs6000/sysv4.h (ASM_SPEC, CPP_SYSV_SPEC): Likewise.
	* config/rs6000/vxworks.h (CPP_SPEC): Likewise.
	* config/sparc/linux.h (CPP_SUBTARGET_SPEC, ASM_SPEC): Likewise.
	* config/sparc/linux64.h (CPP_SUBTARGET_SPEC, ASM_SPEC): Likewise.
	* config/sparc/sparc.h (ASM_SPEC): Likewise.
	* config/sparc/sp64-elf.h (ASM_SPEC): Likewise.
	* config/sparc/sysv4.h (ASM_SPEC): Likewise.
	* config/sparc/netbsd-elf.h (ASM_SPEC): Likewise.
	* config/sparc/openbsd64.h (ASM_SPEC): Likewise.
	* config/cris/linux.h (CRIS_ASM_SUBTARGET_SPEC): Likewise.
	* config/linux.h (STARTFILE_SPEC, ENDFILE_SPEC): Handle -pie.
	Simplify.
	* config/alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/i386/linux64.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/ia64/linux.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/rs6000/sysv4.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/rs6000/linux64.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/sparc/linux.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* config/sparc/linux64.h (STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	* doc/invoke.texi: Document -pie, -fpie and -fPIE options.

From-SVN: r67359
2003-06-03 11:06:55 +02:00

652 lines
18 KiB
Plaintext

/* config.in. Generated automatically from configure.in by autoheader. */
/* Define if using alloca.c. */
#undef C_ALLOCA
/* Define to empty if the keyword does not work. */
#undef const
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
This function is required for alloca.c support on those systems. */
#undef CRAY_STACKSEG_END
/* Define to the type of elements in the array set by `getgroups'.
Usually this is either `int' or `gid_t'. */
#undef GETGROUPS_T
/* Define to `int' if <sys/types.h> doesn't define. */
#undef gid_t
/* Define if you have alloca, as a function or macro. */
#undef HAVE_ALLOCA
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
#undef HAVE_ALLOCA_H
/* Define if you have the ANSI # stringizing operator in cpp. */
#undef HAVE_STRINGIZE
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
/* Define if you have <vfork.h>. */
#undef HAVE_VFORK_H
/* Define as __inline if that's what the C compiler calls it. */
#undef inline
/* Define if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define to `int' if <sys/types.h> doesn't define. */
#undef pid_t
/* Define to `unsigned' if <sys/types.h> doesn't define. */
#undef size_t
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown
*/
#undef STACK_DIRECTION
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define to `int' if <sys/types.h> doesn't define. */
#undef uid_t
/* Define vfork as fork if vfork does not work. */
#undef vfork
/* Define if your assembler supports specifying the maximum number
of bytes to skip when using the GAS .p2align command. */
#undef HAVE_GAS_MAX_SKIP_P2ALIGN
/* Define if your assembler supports .balign and .p2align. */
#undef HAVE_GAS_BALIGN_AND_P2ALIGN
/* Define if your assembler uses the old HImode fild and fist notation. */
#undef HAVE_GAS_FILDS_FISTS
/* Define to `int' if <sys/types.h> doesn't define. */
#undef ssize_t
/* Define if cpp should also search $prefix/include. */
#undef PREFIX_INCLUDE_DIR
/* Define if you have the __argz_count function. */
#undef HAVE___ARGZ_COUNT
/* Define if you have the __argz_next function. */
#undef HAVE___ARGZ_NEXT
/* Define if you have the __argz_stringify function. */
#undef HAVE___ARGZ_STRINGIFY
/* Define if you have the alphasort function. */
#undef HAVE_ALPHASORT
/* Define if you have the atoll function. */
#undef HAVE_ATOLL
/* Define if you have the atoq function. */
#undef HAVE_ATOQ
/* Define if you have the clock function. */
#undef HAVE_CLOCK
/* Define if you have the dcgettext function. */
#undef HAVE_DCGETTEXT
/* Define if you have the dup2 function. */
#undef HAVE_DUP2
/* Define if you have the feof_unlocked function. */
#undef HAVE_FEOF_UNLOCKED
/* Define if you have the fgets_unlocked function. */
#undef HAVE_FGETS_UNLOCKED
/* Define if you have the fprintf_unlocked function. */
#undef HAVE_FPRINTF_UNLOCKED
/* Define if you have the fputc_unlocked function. */
#undef HAVE_FPUTC_UNLOCKED
/* Define if you have the fputs_unlocked function. */
#undef HAVE_FPUTS_UNLOCKED
/* Define if you have the fwrite_unlocked function. */
#undef HAVE_FWRITE_UNLOCKED
/* Define if you have the getcwd function. */
#undef HAVE_GETCWD
/* Define if you have the getegid function. */
#undef HAVE_GETEGID
/* Define if you have the geteuid function. */
#undef HAVE_GETEUID
/* Define if you have the getgid function. */
#undef HAVE_GETGID
/* Define if you have the getpagesize function. */
#undef HAVE_GETPAGESIZE
/* Define if you have the getrlimit function. */
#undef HAVE_GETRLIMIT
/* Define if you have the getrusage function. */
#undef HAVE_GETRUSAGE
/* Define if you have the gettimeofday function. */
#undef HAVE_GETTIMEOFDAY
/* Define if you have the getuid function. */
#undef HAVE_GETUID
/* Define if you have the kill function. */
#undef HAVE_KILL
/* Define if you have the lstat function. */
#undef HAVE_LSTAT
/* Define if you have the mbstowcs function. */
#undef HAVE_MBSTOWCS
/* Define if you have the mempcpy function. */
#undef HAVE_MEMPCPY
/* Define if you have the munmap function. */
#undef HAVE_MUNMAP
/* Define if you have the nl_langinfo function. */
#undef HAVE_NL_LANGINFO
/* Define if you have the putc_unlocked function. */
#undef HAVE_PUTC_UNLOCKED
/* Define if you have the putenv function. */
#undef HAVE_PUTENV
/* Define if you have the scandir function. */
#undef HAVE_SCANDIR
/* Define if you have the setenv function. */
#undef HAVE_SETENV
/* Define if you have the setlocale function. */
#undef HAVE_SETLOCALE
/* Define if you have the setrlimit function. */
#undef HAVE_SETRLIMIT
/* Define if you have the stpcpy function. */
#undef HAVE_STPCPY
/* Define if you have the strcasecmp function. */
#undef HAVE_STRCASECMP
/* Define if you have the strchr function. */
#undef HAVE_STRCHR
/* Define if you have the strdup function. */
#undef HAVE_STRDUP
/* Define if you have the strsignal function. */
#undef HAVE_STRSIGNAL
/* Define if you have the strtoul function. */
#undef HAVE_STRTOUL
/* Define if you have the sysconf function. */
#undef HAVE_SYSCONF
/* Define if you have the times function. */
#undef HAVE_TIMES
/* Define if you have the tsearch function. */
#undef HAVE_TSEARCH
/* Define if you have the wcswidth function. */
#undef HAVE_WCSWIDTH
/* Define if you have the <argz.h> header file. */
#undef HAVE_ARGZ_H
/* Define if you have the <direct.h> header file. */
#undef HAVE_DIRECT_H
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define if you have the <langinfo.h> header file. */
#undef HAVE_LANGINFO_H
/* Define if you have the <ldfcn.h> header file. */
#undef HAVE_LDFCN_H
/* Define if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
/* Define if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
/* Define if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define if you have the <nl_types.h> header file. */
#undef HAVE_NL_TYPES_H
/* Define if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
/* Define if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/resource.h> header file. */
#undef HAVE_SYS_RESOURCE_H
/* Define if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <sys/times.h> header file. */
#undef HAVE_SYS_TIMES_H
/* Define if you have the <time.h> header file. */
#undef HAVE_TIME_H
/* Define if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define if you have the <wchar.h> header file. */
#undef HAVE_WCHAR_H
/* Define to enable the use of a default linker. */
#undef DEFAULT_LINKER
/* Define to enable the use of a default assembler. */
#undef DEFAULT_ASSEMBLER
/* Define if your compiler understands volatile. */
#undef HAVE_VOLATILE
/* Define if your compiler supports the `long double' type. */
#undef HAVE_LONG_DOUBLE
/* Define if your compiler supports the `long long' type. */
#undef HAVE_LONG_LONG
/* Define if your compiler supports the `__int64' type. */
#undef HAVE___INT64
/* Define if the `_Bool' type is built-in. */
#undef HAVE__BOOL
/* The number of bytes in type short */
#undef SIZEOF_SHORT
/* The number of bytes in type int */
#undef SIZEOF_INT
/* The number of bytes in type long */
#undef SIZEOF_LONG
/* The number of bytes in type long long */
#undef SIZEOF_LONG_LONG
/* The number of bytes in type __int64 */
#undef SIZEOF___INT64
/* Define if the host execution character set is EBCDIC. */
#undef HOST_EBCDIC
/* Define if you want more run-time sanity checks. This one gets a grab
bag of miscellaneous but relatively cheap checks. */
#undef ENABLE_CHECKING
/* Define if you want all operations on trees (the basic data
structure of the front ends) to be checked for dynamic type safety
at runtime. This is moderately expensive. */
#undef ENABLE_TREE_CHECKING
/* Define if you want all operations on RTL (the basic data structure
of the optimizer and back end) to be checked for dynamic type safety
at runtime. This is quite expensive. */
#undef ENABLE_RTL_CHECKING
/* Define if you want RTL flag accesses to be checked against the RTL
codes that are supported for each access macro. This is relatively
cheap. */
#undef ENABLE_RTL_FLAG_CHECKING
/* Define if you want the garbage collector to do object poisoning and
other memory allocation checks. This is quite expensive. */
#undef ENABLE_GC_CHECKING
/* Define if you want the garbage collector to operate in maximally
paranoid mode, validating the entire heap and collecting garbage at
every opportunity. This is extremely expensive. */
#undef ENABLE_GC_ALWAYS_COLLECT
/* Define if you want to run subprograms and generated programs
through valgrind (a memory checker). This is extremely expensive. */
#undef ENABLE_VALGRIND_CHECKING
/* Define if valgrind's memcheck.h header is installed. */
#undef HAVE_MEMCHECK_H
/* Define if you want to use __cxa_atexit, rather than atexit, to
register C++ destructors for local statics and global objects.
This is essential for fully standards-compliant handling of
destructors, but requires __cxa_atexit in libc. */
#undef DEFAULT_USE_CXA_ATEXIT
/* Define if you want the C and C++ compilers to support multibyte
character sets for source code. */
#undef MULTIBYTE_CHARS
/* Always define this when using the GNU C Library */
#undef _GNU_SOURCE
/* Define if you have a working <stdbool.h> header file. */
#undef HAVE_STDBOOL_H
/* Define if you can safely include both <string.h> and <strings.h>. */
#undef STRING_WITH_STRINGS
/* Define as the number of bits in a byte, if `limits.h' doesn't. */
#undef CHAR_BIT
/* whether byteorder is bigendian */
#undef WORDS_BIGENDIAN
/* Define if the host machine stores words of multi-word integers in
big-endian order. */
#undef HOST_WORDS_BIG_ENDIAN
/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
#undef BYTEORDER
/* Define if you have a working <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define this macro if mbstowcs does not crash when its
first argument is NULL. */
#undef HAVE_WORKING_MBSTOWCS
/* Define if printf supports %p. */
#undef HAVE_PRINTF_PTR
/* Define if mmap can get us zeroed pages from /dev/zero. */
#undef HAVE_MMAP_DEV_ZERO
/* Define if mmap can get us zeroed pages using MAP_ANON(YMOUS). */
#undef HAVE_MMAP_ANON
/* Define if read-only mmap of a plain file works. */
#undef HAVE_MMAP_FILE
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETENV
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_ATOL
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_SBRK
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_ABORT
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_ATOF
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETCWD
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETWD
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_STRSIGNAL
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_PUTC_UNLOCKED
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_FPUTS_UNLOCKED
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_FWRITE_UNLOCKED
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_FPRINTF_UNLOCKED
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_STRSTR
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_ERRNO
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_VASPRINTF
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_MALLOC
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_REALLOC
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_CALLOC
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_FREE
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_BASENAME
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETOPT
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_CLOCK
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETRLIMIT
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_SETRLIMIT
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETRUSAGE
/* Define to `long' if <sys/resource.h> doesn't define. */
#undef rlim_t
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_LDGETNAME
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_TIMES
/* Define if <sys/times.h> defines struct tms. */
#undef HAVE_STRUCT_TMS
/* Define if <time.h> defines clock_t. */
#undef HAVE_CLOCK_T
/* Define if <sys/types.h> defines `uchar'. */
#undef HAVE_UCHAR
/* Define .init_array/.fini_array sections are available and working. */
#undef HAVE_INITFINI_ARRAY
/* Define if host mkdir takes a single argument. */
#undef MKDIR_TAKES_ONE_ARG
/* Define 0/1 to force the choice for exception handling model. */
#undef CONFIG_SJLJ_EXCEPTIONS
/* Define if gcc should use -lunwind. */
#undef USE_LIBUNWIND_EXCEPTIONS
/* Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h). */
#undef NEED_64BIT_HOST_WIDE_INT
/* Define to the name of a file containing a list of extra machine modes
for this architecture. */
#undef EXTRA_MODES_FILE
/* Define if the target architecture needs extra machine modes to represent
the results of comparisons. */
#undef EXTRA_CC_MODES
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
#undef HAVE_LANGINFO_CODESET
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
/* Define to 1 if translation of program messages to the user's native language
is requested. */
#undef ENABLE_NLS
/* Define if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
/* Define to use the libintl included with this package instead of any
version in the system libraries. */
#undef USE_INCLUDED_LIBINTL
/* Define to 1 if installation paths should be looked up in Windows32
Registry. Ignored on non windows32 hosts. */
#undef ENABLE_WIN32_REGISTRY
/* Define to be the last portion of registry key on windows hosts. */
#undef WIN32_REGISTRY_KEY
/* Define if your assembler supports .subsection and .subsection -1 starts
emitting at the beginning of your section. */
#undef HAVE_GAS_SUBSECTION_ORDERING
/* Define if your assembler supports .weak. */
#undef HAVE_GAS_WEAK
/* Define if your assembler supports .hidden. */
#undef HAVE_GAS_HIDDEN
/* Define if your assembler supports .uleb128. */
#undef HAVE_AS_LEB128
/* Define if your assembler mis-optimizes .eh_frame data. */
#undef USE_AS_TRADITIONAL_FORMAT
/* Define if your assembler supports marking sections with SHF_MERGE flag. */
#undef HAVE_GAS_SHF_MERGE
/* Define if your assembler supports thread-local storage. */
#undef HAVE_AS_TLS
/* Define if your assembler supports explicit relocations. */
#undef HAVE_AS_EXPLICIT_RELOCS
/* Define if your assembler supports .register. */
#undef HAVE_AS_REGISTER_PSEUDO_OP
/* Define if your assembler supports -relax option. */
#undef HAVE_AS_RELAX_OPTION
/* Define if your assembler and linker support unaligned PC relative relocs. */
#undef HAVE_AS_SPARC_UA_PCREL
/* Define if your assembler and linker support unaligned PC relative relocs against hidden symbols. */
#undef HAVE_AS_SPARC_UA_PCREL_HIDDEN
/* Define if your assembler supports offsetable %lo(). */
#undef HAVE_AS_OFFSETABLE_LO10
/* Define true if the assembler supports '.long foo@GOTOFF'. */
#undef HAVE_AS_GOTOFF_IN_DATA
/* Define if your assembler supports ltoffx and ldxmov relocations. */
#undef HAVE_AS_LTOFFX_LDXMOV_RELOCS
/* Define if your assembler supports dwarf2 .file/.loc directives,
and preserves file table indices exactly as given. */
#undef HAVE_AS_DWARF2_DEBUG_LINE
/* Define if your assembler supports the --gdwarf2 option. */
#undef HAVE_AS_GDWARF2_DEBUG_FLAG
/* Define if your assembler supports the --gstabs option. */
#undef HAVE_AS_GSTABS_DEBUG_FLAG
/* Define if your linker links a mix of read-only
and read-write sections into a read-write section. */
#undef HAVE_LD_RO_RW_SECTION_MIXING
/* Define if your linker supports --eh-frame-hdr option. */
#undef HAVE_LD_EH_FRAME_HDR
/* Define if your linker supports -pie option. */
#undef HAVE_LD_PIE
/* Define if your MIPS libgloss linker scripts consistently include STARTUP directives. */
#undef HAVE_MIPS_LIBGLOSS_STARTUP_DIRECTIVES
/* Bison unconditionally undefines `const' if neither `__STDC__' nor
__cplusplus are defined. That's a problem since we use `const' in
the GCC headers, and the resulting bison code is therefore type
unsafe. Thus, we must match the bison behavior here. */
#ifndef __STDC__
#ifndef __cplusplus
#undef const
#define const
#endif
#endif