/* SPDX-License-Identifier: BSD-2-Clause */
/* Copyright 2016 The NASM Authors - All Rights Reserved */

/*
 * config/msvc.h
 *
 * Compiler definitions for Microsoft Visual C++;
 * instead of unconfig.h.  See config.h.in for the
 * variables which can be defined here.
 *
 * MSDN seems to have information back to Visual Studio 2003, so aim
 * for compatibility that far back.
 *
 * Relevant _MSC_VER values:
 * 1310 - Visual Studio 2003
 * 1400 - Visual Studio 2005
 * 1500 - Visual Studio 2008
 * 1600 - Visual Studio 2010
 * 1700 - Visual Studio 2012
 * 1800 - Visual Studio 2013
 * 1900 - Visual Studio 2015
 * 1910 - Visual Studio 2017
 */

#ifndef NASM_CONFIG_MSVC_H
#define NASM_CONFIG_MSVC_H

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if you have the <inttypes.h> header file. */
#if _MSC_VER >= 1800
# define HAVE_INTTYPES_H 1
#endif

/* Define to 1 if you have the <io.h> header file. */
#define HAVE_IO_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 <string.h> header file. */
#define HAVE_STRING_H 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 `access' function. */
#define HAVE_ACCESS 1
#if _MSC_VER < 1400
# define access _access
#endif

/* Define to 1 if you have the `fileno' function. */
#define HAVE_FILENO 1
#if _MSC_VER < 1400
# define fileno _fileno
#endif

/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif

/* Define to 1 if you have the `_chsize' function. */
#define HAVE__CHSIZE 1

/* Define to 1 if you have the `_chsize_s' function. */
#if _MSC_VER >= 1400
# define HAVE__CHSIZE_S 1
#endif

/* Define to 1 if you have the `_filelengthi64' function. */
#define HAVE__FILELENGTHI64 1

/* Define to 1 if you have the `_fseeki64' function. */
#define HAVE__FSEEKI64 1

/* Define to 1 if you have the `_fullpath' function. */
#define HAVE__FULLPATH 1

/* Define to 1 if the system has the type `struct _stati64'. */
#define HAVE_STRUCT__STATI64

/* Define to 1 if you have the `_stati64' function. */
#define HAVE__STATI64 1

/* Define to 1 if you have the `_fstati64' function. */
#define HAVE__FSTATI64 1

/* Define to 1 if stdbool.h conforms to C99. */
#if _MSC_VER >= 1800
# define HAVE_STDBOOL_H 1
#endif

/* Define to 1 if you have the `stricmp' function. */
#define HAVE_STRICMP 1
/* Define to 1 if you have the declaration of `stricmp', and to 0 if you
   don't. */
#define HAVE_DECL_STRICMP 1
#if _MSC_VER < 1400
# define stricmp _stricmp
#endif

/* Define to 1 if you have the `strnicmp' function. */
#define HAVE_STRNICMP 1
/* Define to 1 if you have the declaration of `strnicmp', and to 0 if you
   don't. */
#define HAVE_DECL_STRNICMP 1
#if _MSC_VER < 1400
# define strnicmp _strnicmp
#endif

#if _MSC_VER >= 1400
/* Define to 1 if you have the `strnlen' function. */
# define HAVE_STRNLEN 1
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
   don't. */
# define HAVE_DECL_STRNLEN 1
#endif

/* Define to 1 if the system has the type `uintptr_t'. */
#if _MSC_VER >= 1900
# define HAVE_UINTPTR_T 1
#else
/* Define to the type of an unsigned integer type wide enough to hold a
   pointer, if such a type exists, and if the system does not define it. */
# define uintptr_t size_t
#endif

/* Define to 1 if you have the `vsnprintf' function. */
#define HAVE_VSNPRINTF 1
#if _MSC_VER < 1400
# define vsnprint _vsnprintf
#endif

/* Define to 1 if the system has the type `_Bool'. */
#if _MSC_VER >= 1900
# define HAVE__BOOL 1
#endif

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Define to 1 if your processor stores words with the least significant byte
   first (like Intel and VAX, unlike Motorola and SPARC). */
#define WORDS_LITTLEENDIAN 1

/* Define to `__inline__' or `__inline' if that's what the C compiler
   calls it, or to nothing if 'inline' is not supported under any name.  */
#define inline __inline

/* Define to the equivalent of the C99 'restrict' keyword, or to
   nothing if this is not supported.  Do not define if restrict is
   supported directly.  */
#if _MSC_VER >= 1700
#define restrict __restrict
#else
#define restrict
#endif

#endif /* NASM_CONFIG_MSVC_H */
